from sklearn.datasets import load_iris, fetch_20newsgroups
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split


# 1. 获取数据
# 1.1 获取小数据集
ret = load_iris()
# print('鸢尾花数据集:\n', ret)
# print(type(ret))  # 返回的数据是继承自字典的Bunch
# print('鸢尾花的特征值:\n', ret["data"])
# print('鸢尾花的目标值:\n', ret.target)  # 取值可以和上面一样，总共两种方式
# print('鸢尾花的特征值名字是:\n', ret.feature_names)
# print('鸢尾花的目标值名字是:\n', ret.target_names)
# print('数据集的描述是:\n', ret.DESCR)

# 1.1 获取大规模数据，数据不是在本地是在网上，要下载，运行时不会马上出来结果
# iris = fetch_20newsgroups(data_home='./big_data/')  # data_home是下载该文数据文件所存放的路径
# print('大规模数据:\n', iris)


# 2. 数据可视化
# 2.1 将特征值存储到DateFrame中
ret_d = pd.DataFrame(data=ret.data, columns=['Sepal_Length', 'Sepal_Width', 'Petal_Length', 'Petal_Width'])
ret_d['Species'] = ret.target
# print(ret_d.head())


# 2.2 定义可视化方法
def ret_plot(iris, col1, col2):
    # 绘图，参数：x,y相当于plt.xlabel对行列进行说明，是必填参数，data是需要可视化的数据，hue是按照哪个参数进行分类显示，fit_reg默认是True，是否进行线性拟合
    sns.lmplot(x=col1, y=col2, data=iris, hue='Species', fit_reg=True)
    # 对图片进行修饰
    plt.title('各种鸢尾花的分布图')
    plt.grid()
    # plt.legend(loc='best')
    # 展示图片
    plt.show()


# 2.3 数据可视化
# ret_plot(ret_d, 'Sepal_Length', 'Sepal_Width')

# 3. 数据集的划分,方法返回四个参数：x_train, x_test, y_train, y_test, 分别表示训练集特征值，测试集的特征值，训练集的目标值，测试集的目标值
# 该方法的四个参数依次为 x:特征值，y:目标值，test_size:测试集大小一般为,相当于占测试集数据占总数据的多少，random_state随机数种子，不同的种子采样结果不同
x_train, x_test, y_train, y_test = train_test_split(ret.data, ret.target, random_state=22)
print('测试集的目标值:\n', y_test)
print(len(y_test)/len(ret.target))  # 0.25333333333333335

x_train1, x_test1, y_train1, y_test1 = train_test_split(ret.data, ret.target, random_state=2)
x_train2, x_test2, y_train2, y_test2 = train_test_split(ret.data, ret.target, random_state=2)
# print('测试集的目标值:\n', y_test1)
# print(y_test == y_test1)  # 部分为True
# print(y_test1 == y_test2)  # 全部为True



